﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using _10_HPBar.GameFrame.Interface;

namespace _10_HPBar.Scene.Manager
{
    internal class SceneManager : IGame
    {
        List<IScene> scenes;
        int currentSceneIndex;

        public SceneManager()
        {
            // todo 学过数据结构之后优化 注册
            scenes = new List<IScene>();
            currentSceneIndex = 0;
        }

        public void Init()
        {

            scenes[currentSceneIndex].Init();
        }

        public void Input()
        {
            //  避免冲突
            scenes[currentSceneIndex].Input();
            //for (int i = 0; i < scenes.Length; i++)
            //{
            //    scenes[i].Input();
            //}
        }

        public void Update()
        {
            scenes[currentSceneIndex].Update();
            //for (int i = 0; i < scenes.Length; i++)
            //{
            //    scenes[i].Update();
            //}
        }
        public void FixedUpdate()
        {
            scenes[currentSceneIndex].FixedUpdate();
            //for (int i = 0; i < scenes.Length; i++)
            //{
            //    scenes[i].FixUpdate();
            //}
        }

        public void Render()
        {
            scenes[currentSceneIndex].Render();
            //for (int i = 0; i < scenes.Length; i++)
            //{
            //    scenes[i].Render();
            //}
        }

        public void End()
        {

            scenes[currentSceneIndex].End();
        }

        public void ChangeSceneByName(string name)
        {
            scenes[currentSceneIndex].End();
            for (int i = 0; i < scenes.Count; i++)
            {
                if (scenes[i].Name == name)
                {
                    currentSceneIndex = i;
                    Console.Clear();
                    scenes[currentSceneIndex].Init();
                    return;
                }
            }
        }

        public void AddScene(IScene scene)
        {
            // 严谨一点的话 就查个重
            scenes.Add(scene);
        }

        public string GetCurrentSceneName()
        {
            return scenes[currentSceneIndex].Name;
        }
    }
}
